import { Entity, Column, Index } from 'typeorm';
import { CommonEntity } from './common.entity'
// user：用户表，主要用于用户的登录和注册，发布文章、点赞、收藏、评论都需要用到

/*索引  通过索引，查询数据时不用读完记录的所有信息，而只是查询索引列。
优点：
  通过创建唯一索引可以保证数据库表中每一行数据的唯一性。
  可以给所有的 MySQL 列类型设置索引。
  可以大大加快数据的查询速度，这是使用索引最主要的原因。
  在实现数据的参考完整性方面可以加速表与表之间的连接。
  在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间
缺点
  增加索引也有许多不利的方面，主要如下：
  创建和维护索引组要耗费时间，并且随着数据量的增加所耗费的时间也会增加。
  索引需要占磁盘空间，除了数据表占数据空间以外，每一个索引还要占一定的物理空间。如果有大量的索引，索引文件可能比数据文件更快达到最大文件尺寸。
  当对表中的数据进行增加、删除和修改的时候，索引也要动态维护，这样就降低了数据的维护速度。
*/
@Entity('user')
export class UserEntity extends CommonEntity {
  @Column({
    type: 'varchar',
    nullable: false,//在数据库中使列NULL或NOT NULL。 默认情况下，列是nullable：false
    length: 45,
    name: 'username',
    comment: '用户名',
  })
  username: string;

  @Index('email_unique', { unique: true })//添加索引 别名 唯一索引
  @Column({
    type: 'varchar',
    length: 45,
    unique: true,
    name: 'email',
    comment: '邮箱',
  })
  email: string;

  @Column({
    type: 'varchar',
    length: 100,
    name: 'password',
    select: false,//查询数据时不展示给前台
    comment: '密码',
  })
  password: string;

  @Column({
    type: 'varchar',
    length: 100,
    name: 'pass_salt',
    select: false,//查询数据时不展示给前台
    nullable: true,
    comment: '密码加盐',
  })
  passSalt: string;


  @Column({
    type: 'varchar',
    length: 110,
    nullable: true,
    name: 'mobile',
    comment: '手机号码',
  })
  mobile: string;

  @Column({
    type: 'int',
    name: 'isSuper',
    default: '1',
    comment: '是否超级管理员 0:超级管理员1:管理员2:一般人员',
  })
  isSuper: number;

  @Column({
    type: 'int',
    name: 'status',
    default: '1',
    comment: '状态 0:禁用 1:正常',
  })
  status: number;
}